package main

import (
	"fmt"
	"strings"
)

func main() {
	fmt.Println(strStr02("hello","ll"))
}

// 直接用库函数
func strStr(haystack string, needle string) int {
	return strings.Index(haystack, needle)
}

// 用 Go 特性
func strStr01(haystack string, needle string) int {
	if len(needle) == 0 {
		return 0
	}

	if len(haystack) < len(needle) {
		return -1
	}

	for i := 0; i <= len(haystack)-len(needle); i++ {
		// 直接切片比较
		if haystack[i:len(needle) + i] == needle {
			return i
		}
	}

	return -1
}

// 不使用 Go 特性
func strStr02(haystack string, needle string) int {
	if len(needle) == 0 {
		return 0
	}

	if len(haystack) < len(needle) {
		return -1
	}

	for i := 0; i <= len(haystack)-len(needle); i++ {
		j := 0

		for ; j < len(needle); j++ {
			if needle[j] != haystack[j + i] {
				break
			}
		}

		if j == len(needle) {
			return i
		}
	}

	return -1
}
